package simple.array;

/**
 * <a href="https://leetcode.cn/problems/maximum-product-of-three-numbers/">628. 三个数的最大乘积</a>
 * 给你一个整型数组 nums ，在数组中找出由三个数组成的最大乘积，并输出这个乘积。
 * 示例 1：
 *   输入：nums = [1,2,3]
 *   输出：6
 * 示例 2：
 *   输入：nums = [1,2,3,4]
 *   输出：24
 * 示例 3：
 *   输入：nums = [-1,-2,-3]
 *   输出：-6
 * 提示：
 *   3 <= nums.length <= 10^4
 *   -1000 <= nums[i] <= 1000
 * @author 刘学松
 * @date 2023-06-15 15:23
 */
public class 三个数的最大乘积 {
    public int maximumProduct(int[] nums) {
        if (nums.length == 3) {
            return nums[0] * nums[1] * nums[2];
        }
        int min1 = Integer.MAX_VALUE, min2 = Integer.MAX_VALUE;
        int max1 = Integer.MIN_VALUE, max2 = Integer.MIN_VALUE, max3 = Integer.MIN_VALUE;

        for (int num : nums) {
            if (num < min1) {
                min2 = min1;
                min1 = num;
            } else if (num < min2) {
                min2 = num;
            }

            if (num > max1) {
                max3 = max2;
                max2 = max1;
                max1 = num;
            } else if (num > max2) {
                max3 = max2;
                max2 = num;
            } else if (num > max3) {
                max3 = num;
            }
        }
        return Math.max(min1 * min2 * max1, max1 * max2 * max3);
    }
}
